home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / multi2.zip / TASKWIN.PAS < prev   
Pascal/Delphi Source File  |  1993-01-04  |  3KB  |  125 lines

  1. PROGRAM TaskWindows;
  2.  
  3. {$R-,S-,I-,D-,F-,V-,B-,N-,L- }
  4. {
  5.   Code-Sharing Demo
  6.  
  7.   Christian Philipps
  8.   Düsseldorfer Str. 316
  9.   4130 Moers 1
  10.  
  11.   November 1988
  12. }
  13.  
  14. USES Crt, CpMulti;
  15.  
  16. TYPE WinType = RECORD
  17.                  Top,
  18.                  Left,
  19.                  Bottom,
  20.                  Right  : word;
  21.                END;
  22.  
  23. CONST NoWin  = 8;
  24.       TaskWin : ARRAY[1..8] OF WinType =
  25.                 ((Top:2;Left:5;Bottom:9;Right:15),
  26.                  (Top:2;Left:25;Bottom:9;Right:35),
  27.                  (Top:2;Left:45;Bottom:9;Right:55),
  28.                  (Top:2;Left:65;Bottom:9;Right:75),
  29.                  (Top:12;Left:5;Bottom:19;Right:15),
  30.                  (Top:12;Left:25;Bottom:19;Right:35),
  31.                  (Top:12;Left:45;Bottom:19;Right:55),
  32.                  (Top:12;Left:65;Bottom:19;Right:75));
  33.  
  34. VAR   Sem    : Pointer;
  35.       Screen : Pointer;
  36.       TaskNo : Word;
  37.  
  38. {---------------------------------------------------------------------------}
  39.  
  40. PROCEDURE Frame (X1,Y1,X2,Y2:BYTE);
  41.  
  42. VAR N : BYTE;
  43.  
  44. BEGIN { Frame }
  45.   SemWait(Screen);
  46.   Window(1,1,80,25);
  47.   GotoXY(X1,Y1);
  48.   Write('╔');
  49.   FOR N := 1 TO X2-X1-1 DO
  50.     Write('═');
  51.   Write('╗');
  52.   FOR N := 1 TO Y2-Y1-1 DO
  53.   BEGIN
  54.     GotoXY(X1,Y1+N);
  55.     Write('║');
  56.     GotoXY(X2,Y1+N);
  57.     Write('║');
  58.   END;
  59.   GotoXY(X1,Y2);
  60.   Write('╚');
  61.   FOR N := 1 TO X2-X1-1 DO
  62.     Write('═');
  63.   Write('╝');
  64.   SemSignal(Screen);
  65. END;  { Frame }
  66.  
  67. {---------------------------------------------------------------------------}
  68.  
  69. PROCEDURE SubTask;
  70.  
  71. VAR  MyNo : Word;
  72.      Pass : Word;
  73.  
  74. BEGIN {SubTask}
  75.   MyNo := TaskNo;
  76.   Pass := 1;
  77.   SemSignal(Sem);
  78.   WITH TaskWin[MyNo] DO
  79.     Frame(Left-1,Top-1,Right+1,Bottom+1);
  80.   REPEAT
  81.     SemWait(Screen);
  82.     WITH TaskWin[MyNo] DO
  83.     BEGIN
  84.       Window(Left,Top,Right,Bottom);
  85.       GotoXY(2,8);
  86.       Writeln('--',Pass:4,' --');
  87.       Inc(Pass);
  88.     END;
  89.     SemSignal(Screen);
  90.     Sleep(Random(Seconds(1)));
  91.   UNTIL False;
  92. END;  {SubTask}
  93.  
  94. {---------------------------------------------------------------------------}
  95.  
  96. BEGIN {Main}
  97.   ClrScr;
  98.   GotoXY(20,23);
  99.   Writeln('Press any key to end program...');
  100.   IF (CreateSem(Sem) <> Sem_OK)    OR
  101.      (CreateSem(Screen) <> Sem_Ok)
  102.      THEN BEGIN
  103.             Writeln('Could not create semaphore!');
  104.             Halt(1);
  105.           END;
  106.  
  107.   SemClear(Screen);
  108.   FOR TaskNo := 1 TO NoWin DO
  109.   BEGIN
  110.     SemClear(Sem);
  111.     IF CreateTask(@SubTask,Pri_User,500) < 0
  112.        THEN BEGIN
  113.               Writeln(^G'Could not create task no. ',TaskNo);
  114.               Halt(1);
  115.             END;
  116.     SemWait(Sem);
  117.   END;
  118.   SemSignal(Screen);
  119.   REPEAT
  120.     Sleep(Seconds(1));
  121.   UNTIL Keypressed;
  122.   SemWait(Screen);
  123.   Window(1,1,80,25);
  124.   GotoXY(1,23);
  125. END.